<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>手写new</title>
</head>
<body>
    
</body>
</html>
<script>
function myNew(fn,...args){
    // 定义一个新的对象
    let obj = {}
    // 新的对象的隐式原型指向函数的显示原型
    obj.__proto__=fn.prototype
    // 执行fn()，并使用一个变量接受，改变这个函数的this指向
    let res = fn.call(obj,...args)
    // 判断res的存在并将其返回
    if(res&&(typeof res==="object"||typeof res === "function")){
        return res
    }
    return obj
}
function Person(name,age){
    this.name=name
    this.age=age
}
Person.prototype.say=function(){
    console.log(this.name)
}
let p1 = myNew(Person , '山寰' ,22)
p1.say()
</script>